#ifndef IPC_H
#define IPC_H

#include "types.h"
#include <string>
#include <vector>

// IPC通信端点
const std::string SUPERVISOR_SOCKET = "/tmp/supervisor.sock";
const std::string CAPTURE_SOCKET = "/tmp/capture.sock";
const std::string ALGO_SOCKET = "/tmp/algo.sock";

// 消息类型
enum class MessageType {
    STATE_CHANGE,        // 系统状态变更
    STRIKE_DETECTED,     // 检测到击球
    CAPTURE_FINISHED,    // 采集完成
    PROCESSING_FINISHED, // 分析完成
    CONFIG_UPDATE,       // 配置更新
    HEARTBEAT,           // 心跳检测
    ERROR                // 错误信息
};

struct Message {
    MessageType type;
    SystemState state;          // 用于状态变更消息
    StrikeEvent strike;         // 用于击球事件消息
    std::string error_msg;      // 用于错误消息
    CaptureConfig config;       // 用于配置消息
    uint64_t timestamp;         // 消息时间戳
};

// 发送消息
bool send_message(const std::string& socket_path, const Message& msg);

// 接收消息 (阻塞)
bool receive_message(const std::string& socket_path, Message& msg);

// 创建Unix域套接字服务器
int create_socket_server(const std::string& socket_path);

// 连接到Unix域套接字服务器
int connect_to_server(const std::string& socket_path);

#endif // IPC_H